package com.hospital.workstation.service;

import com.hospital.common.core.domain.R;
import com.hospital.workstation.domain.HisMedicalOrders;
import com.hospital.workstation.domain.TcmPrescription;
import com.hospital.workstation.domain.bo.TcmExportBo;
import com.hospital.workstation.domain.vo.HisMedicalOrdersVo;
import com.hospital.workstation.domain.vo.TcmPrescriptionVo;
import com.hospital.workstation.domain.bo.TcmPrescriptionBo;
import com.hospital.common.core.page.TableDataInfo;
import com.hospital.common.core.domain.PageQuery;

import javax.servlet.http.HttpServletResponse;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 中医证型方剂信息Service接口
 *
 * @author whb
 * @date 2023-06-20
 */
public interface ITcmPrescriptionService {

    /**
     * 查询中医证型方剂信息
     */
    TcmPrescriptionVo queryById(Long id);

    /**
     * 查询中医证型方剂信息列表
     */
    TableDataInfo<TcmPrescriptionVo> queryPageList(TcmPrescriptionBo bo, PageQuery pageQuery);

    /**
     * 查询中医证型方剂信息列表
     */
    List<TcmPrescriptionVo> queryList(TcmPrescriptionBo bo);

    /**
     * 新增中医证型方剂信息
     */
    Boolean insertByBo(TcmPrescriptionBo bo);

    /**
     * 修改中医证型方剂信息
     */
    Boolean updateByBo(TcmPrescriptionBo bo);

    /**
     * 校验并批量删除中医证型方剂信息信息
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 导入中医证型方剂数据
     *
     * @param tcmPrescriptionVoList
     * @return
     */
    R<Void> addBatchTcmPrescription(List<TcmPrescriptionVo> tcmPrescriptionVoList);

    /**
     * 查询下拉列表数据
     *
     * @param bo    证型方剂业务对象
     * @param level 病名和证型下拉分级标识（1 病名 2证型）
     * @return
     */
    R<List<String>> getTcmSelectList(TcmPrescriptionBo bo, String level);

    /**
     * 查询中药饮片
     *
     * @param medicalRecordNo 流水号
     * @return
     */
    R<Map<String, List<HisMedicalOrdersVo>>> getTraditionalMedicalOrdersByMedicalRecordNo(Integer medicalRecordNo);

    /**
     * 审核
     *
     * @param bo
     * @return
     */
    R<List<TcmPrescriptionVo>> audit(TcmPrescriptionBo bo);

    /**
     * 导出处方审核集合
     *
     * @param response
     * @param exportBo
     */
    void export(HttpServletResponse response, TcmExportBo exportBo);
}
